﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.Collections;


namespace GestorDeFlotasDesktop.Login
{
    public partial class Login : MasterPage
    {

        public capaDatos.SQLSyntaxisGeneration loginCD = new capaDatos.SQLSyntaxisGeneration();
        DataTable usuarios;
        
        public DataTable accionesUser;
        ArrayList roles = new ArrayList();
        byte  intentos = 3;
        public Login()
        {
            InitializeComponent();
            
        }

        private void label3_Click(object sender, EventArgs e)
        {
            this.showForm(new LostPassword(this));
        }

       private string getPassword() {

            return "S";
        }
    

        private void button1_Click(object sender, EventArgs e)
        {

            if (intentos > 0)
            {

                if (txtPassw.Text != "" && txtUser.Text != "")//si el usuario ingreso ambos campos e intento logguearse
                {
                    int result = 0;
                    string value = Convert.ToString(result);

                    string query = "select idUsuario,activoUsuario from [PELUSA].usuarios  where ";

                    string pass = "'" + BitConverter.ToString(encriptar(txtPassw.Text)) + "'";
                    query += "usernameUsuario =" + "'" + txtUser.Text + "'" + "and passwordUsuario=" + pass;

                    //comparo los datos contra la BD

                    usuarios = loginCD.executeQuery(query);
                    if (usuarios.Rows.Count == 0)//no se encontro el usuario
                    {

                        MessageBox.Show("Los datos ingresados son incorrectos , por favor verifiquelos");
                        intentos--;

                    }
                    else
                    {//obtengo una tabla con los datos del usuario
                        result = Convert.ToInt32(usuarios.Rows[0].ItemArray[1]);
                        string user = Convert.ToString(usuarios.Rows[0].ItemArray[0]);//idUsuario
                        if (result == 0)
                        {

                            DialogResult ventana;
                            //esta inhabilitando el usuario    
                            ventana = MessageBox.Show("El usuario ingresado no se encuentra activo en estos momentos.");
                            if (ventana.Equals(DialogResult.OK)) { this.Close(); }
                        }
                        else
                            //el usuario esta activo
                            query.Remove(0);

                        query = "select distinct idAccion from PELUSA.roles_usuarios ru,PELUSA.acciones_roles ar where ";
                        query += "ru.idUsuario=" + user + "and ar.idRol=ru.idRol";
                        //obtengo sus funcionalidades permitidas
                        accionesUser = loginCD.executeQuery(query);
                        int max = accionesUser.Rows.Count;
                        int count = 1; int pos = 0;
                        int conv = 0;
                        while (pos < max)
                        {
                            conv = Convert.ToInt32(accionesUser.Rows[pos].ItemArray[0]);
                            if (conv == count)
                            {
                                roles.Add(1);//agrego las funciones permitidas al array
                                count++; pos++;
                            }
                            else
                            {   roles.Add(0);
                                count++;
                            }

                        }
                        if (count < 12)
                        {
                            while (count < 12)
                            {
                                roles.Add(0);
                                count++;
                            }
                        }

                        // aca entra si el usuario y el pass es correcto 
                        DataTable datosUser = new DataTable();
                        ArrayList param = new ArrayList();
                        param = parametrosStoredProcedure(paramsNames("nombreUser"), paramsValues(txtUser.Text));
                        datosUser = loginCD.executeSp("PELUSA.Buscar_DatosUsuario", param);

                        if (Convert.ToString(datosUser.Rows[0].ItemArray[0]).Equals("") && Convert.ToString(datosUser.Rows[0].ItemArray[1]).Equals(""))
                        {
                            // si el usuario no tiene ingresada la preg secreta y la rsta secreta de recuperacion de user  entra aca 
                            this.showForm(new AbmUsuario.UserData(this, txtUser.Text, roles));
                        }
                        else
                        {
                            // si el usuario tiene ingresada la preg secreta y la rsta secreta de recuperacion de user 
                            this.showForm(new Menu(this, roles));
                        }
                        }
                    }

                else
                {
                    MessageBox.Show("Por favor ingrese usuario y contraseña");
                    //no ingreso los datos

                }

            }
                else
            {
                //ya supero la cantidad de intentos
                string user = Convert.ToString(usuarios.Rows[0].ItemArray[0]);
                loginCD.executeSp("PELUSA.inhabilitarHabilitarUsuario", parametrosStoredProcedure(paramsNames("id", "value"), paramsValues(user, "0")));


                DialogResult ventana = new DialogResult();
                ventana = MessageBox.Show("Su usuario ha sido bloqueado, por favor comuniquese con soporte ");

                if (ventana.Equals(DialogResult.OK)) { Application.Exit(); } 
            }
        }

       
    }
}
